﻿using System;

namespace SfsTools.Core
{
    /// <summary>
    /// Visitor.
    /// </summary>
    internal interface IIndexEntryVisitor
    {
        /// <summary>
        /// Called by <see cref="BadSectorEntry"/> objects.
        /// </summary>
        /// <param name="entry">The entry to visit.</param>
        void VisitBadSector(BadSectorEntry entry);

        /// <summary>
        /// Called by <see cref="ContinuationEntry"/> objects.
        /// </summary>
        /// <param name="entry">The entry to visit.</param>
        void VisitContinuation(ContinuationEntry entry);

        /// <summary>
        /// Called by <see cref="PresentDirectoryEntry"/> objects.
        /// </summary>
        /// <param name="entry">The entry to visit.</param>
        void VisitPresentDirectory(PresentDirectoryEntry entry);

        /// <summary>
        /// Called by <see cref="PresentFileEntry"/> objects.
        /// </summary>
        /// <param name="entry">The entry to visit.</param>
        void VisitPresentFile(PresentFileEntry entry);

        /// <summary>
        /// Called by <see cref="DeletedDirectoryEntry"/> objects.
        /// </summary>
        /// <param name="entry">The entry to visit.</param>
        void VisitDeletedDirectory(DeletedDirectoryEntry entry);

        /// <summary>
        /// Called by <see cref="DeletedFileEntry"/> objects.
        /// </summary>
        /// <param name="entry">The entry to visit.</param>
        void VisitDeletedFile(DeletedFileEntry entry);

        /// <summary>
        /// Called by <see cref="StartingMarkerEntry"/> objects.
        /// </summary>
        /// <param name="entry">The entry to visit.</param>
        void VisitStartingMarker(StartingMarkerEntry entry);

        /// <summary>
        /// Called by <see cref="UnknownIndexEntry"/> objects.
        /// </summary>
        /// <param name="entry">The entry to visit.</param>
        void VisitUnknown(UnknownIndexEntry entry);

        /// <summary>
        /// Called by <see cref="UnusedIndexEntry"/> objects.
        /// </summary>
        /// <param name="entry">The entry to visit.</param>
        void VisitUnused(UnusedIndexEntry entry);

        /// <summary>
        /// Called by <see cref="VolumeIdentifierEntry"/> objects.
        /// </summary>
        /// <param name="entry">The entry to visit.</param>
        void VisitVolumeIdentifier(VolumeIdentifierEntry entry);
    }
}
